import fp from 'lodash/fp';
import qs from 'qs';

/**
 * 格式化查询字符串为对象
 * 查询字符串的值为原始值，包括JSON字符串
 * 需要配合addQueryToUrl使用
 * @export
 * @since 1.0.2
 * @example
 * formatQuery('http://xxx?b=2&k=1&a=%5B1%2C2%2C3%5D')
 * // 输出为
 * {
    a: [
      1,
      2,
      3,
    ],
    k: 1,
    b: 2,
  }
 * @param {string} [query=''] 查询字符串 可以是完整的url
 * @return {object} 查询字符串转换成的对象
 */
export default function formatQuery(query:string = ''): object {
  // 参数检查
  if (!query || typeof query !== 'string') {
    return {};
  }
  return fp.flowRight(
    fp.mapValues((item:string) => {
      // 不知道什么原因 导致在ios和安卓不一致 才做如此处理
      try {
        return fp.flowRight(JSON.parse, decodeURIComponent, decodeURIComponent)(item);
      } catch (error) {
        if (fp.isString(item)) {
          return fp.flowRight(decodeURIComponent, decodeURIComponent)(item);
        }
        return item;
      }
    }),
    qs.parse,
    fp.last,
    fp.split('?'),
  )(query);
}
